package org.soderiakelvy.controller.reparto;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;


import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.PersonalVO;
import org.soderiakelvy.model.domain.RepartoVO;
import org.soderiakelvy.model.domain.VehiculoVO;
import org.soderiakelvy.model.service.RepartoServicio;
import org.soderiakelvy.model.service.imp.RepartoServicioImp;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
public class RepartoCreate {
	
	private RepartoServicio servicioReparto;
	private RepartoVO reparto;
	private String deshabilitarGuardar = "true";
	private List<VehiculoVO> vehiculosDisponibles;
	private List<PersonalVO> repartidoresDisponibles;

	public RepartoCreate(){
		servicioReparto = new RepartoServicioImp();
		reparto = new RepartoVO();
		vehiculosDisponibles = servicioReparto.getVehiculoByEstado(ConstantModel.ESTADO_VEHICULO_LIBRE);
		repartidoresDisponibles = servicioReparto.getPersonalByCategoria("Repartidores");
	}

	public String crearReparto(RepartoVO reparto){
		String result = servicioReparto.insertReparto(reparto);
		if(result.equals(ConstantModel.SUCCESS)){
			return Constante.URL_REPARTO_LIST;
		}else {
			if(result.equals(ConstantModel.NOMBRE_DUPLICADO)){
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Nombre Duplicado", "El nombre ingresado ya se encuentra en la Base de Datos"));
			}else {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Error al Insertar un registro", "Surgio un error al ingresar un registro. Comuicarse con el responsable del Sistema"));
			}
			return null;
		}	
	}
	
	public String cancelarAlta(){
		return Constante.URL_REPARTO_LIST;
	}
	public void listenerNombre(){
		if (this.reparto.getNombre().isEmpty()||this.reparto.getNombre() ==null){
			this.deshabilitarGuardar = "true";
			FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
					new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre del Tipo de Cliente no puede ser Vacio", "para continuar "));
		}else{
			this.reparto.setNombre(this.reparto.getNombre().toUpperCase());
			if (servicioReparto.existeNombreReparto(this.reparto)){
				FacesContext.getCurrentInstance().addMessage("form1::errorNombre", 
				new FacesMessage(FacesMessage.SEVERITY_FATAL,"El Nombre de Cliente  Existe", "para continuar "));
				this.deshabilitarGuardar = "true";  
			}else{ 
				this.deshabilitarGuardar = "false"; //HABILITO GUARDAR
			}	
		}
	}
	
	//TODO Get and Set ---
	public RepartoVO getReparto() {
		return reparto;
	}

	public void setReparto(RepartoVO reparto) {
		this.reparto = reparto;
	}
	
	public String getDeshabilitarGuardar() {
		return deshabilitarGuardar;
	}

	public void setDeshabilitarGuardar(String deshabilitarGuardar) {
		this.deshabilitarGuardar = deshabilitarGuardar;
	}

	public List<VehiculoVO> getVehiculosDisponibles() {
		return vehiculosDisponibles;
	}

	public void setVehiculosDisponibles(List<VehiculoVO> vehiculosDisponibles) {
		this.vehiculosDisponibles = vehiculosDisponibles;
	}

	public List<PersonalVO> getRepartidoresDisponibles() {
		return repartidoresDisponibles;
	}

	public void setRepartidoresDisponibles(List<PersonalVO> repartidoresDisponibles) {
		this.repartidoresDisponibles = repartidoresDisponibles;
	}

}
